/**
 * Created by zhuman on 2017/11/19.
 */


/* required config */
var baseUrlStr = '/ks_manager/';
requirejs.config({
    baseUrl: baseUrlStr + 'static/js/module',
    paths: {
        c: '../components'
    },
    urlArgs: 'v25'
});


/* 获取页面参数 */
function getUrlParam(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
    var r = top.location.search.substr(1).match(reg);  //匹配目标参数
    if (r != null) return r[2];
    return null; //返回参数值
}

//获取?后面的字符串
function getCaption(obj) {
    var index = obj.lastIndexOf("?");
    obj = obj.substring(index + 1, obj.length);
    return obj;
}

//获取?前面的字符串
function getBefore(obj) {
    if (obj.indexOf("?") != -1) {
        obj = obj.split("?")[0];
        return obj;
    }
}

//先转码后在获得参数
function getAurlparam(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
    /*var sname = top.location.search;
    var name1 = decodeURIComponent(top.location.search);
    if(sname == name1){
        this.fn.Message("F","路径不合法");
    }
    else{*/
    var r = decodeURIComponent(top.location.search).substr(1).match(reg);
    if (r != null) return r[2];
    return null; //返回参数值
    /*}*/
}

/* 添加.min文件路径后缀 */
function minSuffix(array) {
    $.each(array, function (index, value) {
        if (value.indexOf('.tpl') > -1) {
            array[index] = 'text.min!' + baseUrlStr + 'tpl/' + value;
        } else {
            array[index] = value; //value+'.min';
        }
    });
    return array;
}


var registeModule = {};

/**
 * require代理函数，结合pjax的pjax:end回调事件，在切换页面时，根据当前url，重新执行当前模块的js方法；
 * 需求场景: pjax管理页面前进后退时，如果js已加载过，浏览器则不会重新加载js，重要的是也不会重新执行js，
 * 但页面html会重新加载，如果js之前对dom进行绑定等操作，则之前的绑定全部失效且不会重新绑定，因为js不
 * 被执行了，所以我们利用require管理js的加载，通过代理监听，重新执行一次js；
 * 支持：单个页面引入多个js；
 * 不支持：多个页面引入同个js，如果多个页面引入同个js，请封装成模块使用require引入；
 * 备注: arguments函数说明 http://www.cnblogs.com/Fskjb/archive/2011/10/27/2227111.html；
 * bootstrap的js插件在这种情况下不能直接页面引用，要用require适配，所以弃用了
 */
function requireJS(array, callback) {
    var newArray = minSuffix(array);
    require(newArray, function () {
        //1.第一次加载js , 执行callback , 并且注册到registeModule中 , 根据js和url进行注册
        var modelHref = window.location.href;
        modelHref = modelHref.indexOf('?') > 0 ? modelHref.substring(0, modelHref.indexOf('?')) : modelHref;

        if (!registeModule[callback + modelHref]) {//|| registeModule[callback].indexOf(modelHref+',') == -1 ){
            var args = Array.prototype.slice.call(arguments);
            callback.apply(null, args);

            // 2.监听pjax请求完成后重新加载模块js，单个页面引入多个js情况下，会执行多次，生成多个作用域下的监听
            $(document).on('pjax:success', function () {
                var nowHref = window.location.href;
                nowHref = nowHref.indexOf('?') > 0 ? nowHref.substring(0, nowHref.indexOf('?')) : nowHref;
                if (modelHref == nowHref) {
                    callback.apply(null, args);
                }
            });

            //暂时不支持一个js用多个引用
            registeModule[callback + modelHref] += modelHref + ',';
        }
    });
}

$.pjax.defaults.timeout = 3200;

$.pjax.defaults.maxCacheLength = 0;

var pjaxContainerStr = '.temright';

/**
 * 需求场景：在某些页面需要用ajax请求变化页面，这时需要手动管理pjax路由栈，使通过浏览器前进后退能展示上一次的
 * 页面数据，或浏览器刷新能保持当前数据，而修改url使其带上参数，是为了下一次能从url获取参数，请求数据；
 * 例子: 分页器、搜索框的数据请求;
 * @param arr 传入的参数
 */

function pjaxPushState(arr) {
    var url = location.href;
    for (var key in arr) {
        var index = url.indexOf('?') != -1 ? url.indexOf('?') : url.length;
        var query = url.substring(index);
        var reg = new RegExp("(^|&" + key + ")=[^&]*");
        if (reg.test(query)) {
            url = url.replace(reg, "$1=" + arr[key]);
        } else {
            if (query == '') {
                url = url + '?' + key + '=' + arr[key];
            } else {
                url = url + '&' + key + '=' + arr[key];
            }
        }
    }
    var state = {
        id: (new Date).getTime(),
        url: url,
        title: document.title,
        container: pjaxContainerStr,
        fragment: pjaxContainerStr,
        timeout: $.pjax.defaults.timeout
    };
    $.pjax.state = state;// 因为已停用pjax缓存，所以此处把一个新的state替换没问题
    window.history.pushState(state, '', url);
}

/**
 * 手动进行pjax加载页面
 * @param url
 */
function pjaxGo(url) {
    if (Object.prototype.toString.call(url) == '[object String]') {
        if (url.indexOf('?h=') == -1 && url.indexOf('&h=') == -1) {
            if (url.indexOf('?') > -1) {
                url = url + '&h=' + getAurlparam('h') + '&i=' + getAurlparam('i') + '&t=' + getAurlparam('t');
            } else {
                url = url + '?h=' + getAurlparam('h') + '&i=' + getAurlparam('i') + '&t=' + getAurlparam('t');
            }
        }
        url = getBefore(url) + '?' + encodeURIComponent(getCaption(url));
    }
    $.pjax({url: url, container: pjaxContainerStr, fragment: pjaxContainerStr});
}

/**
 * 重新加载当前页面
 */
function pjaxReload() {
    $.pjax.reload(pjaxContainerStr, {fragment: pjaxContainerStr});
}


(function () {
    //使用pjax进行侧边栏导航
    $(document).on('click', '[data-pjax]', function (event) {
        try {
            $.pjax.click(event, {container: pjaxContainerStr, fragment: pjaxContainerStr});
        } catch (e) {
            //alert('通过id获取的方式不行了');
        }
    });

    //使用pjax进行form表单提交
    $(document).on('submit', 'form[data-pjax]', function (event) {
        try {
            $.pjax.submit(event, {container: pjaxContainerStr, fragment: pjaxContainerStr});
        } catch (e) {
            console.log(e);
            //alert('通过id获取的方式不行了');
        }
    });

    kaisheng_init();

})();

//图片上传



